Aller au contenu principal

Interroger des DataFrames

Un filtre est une Series booléenne alignée sur l'index.

import pandas as pd

orders = pd.DataFrame({
"customer_id": ["C1", "C2", None],
"amount": [120, 80, 200],
"status": ["paid", "shipped", "pending"],
"created_at": pd.to_datetime(["2026-01-02", "2026-03-31 12:00", "2026-04-01"], format="mixed"),
})
mask = orders["amount"].ge(100) & orders["status"].isin(["paid", "shipped"])
large_orders = orders.loc[mask, ["customer_id", "amount", "status"]]

Règles pour les prédicats

  • Placez chaque comparaison entre parenthèses lorsque vous les combinez avec &, | ou ~.
  • Utilisez isin pour l'appartenance, between pour les intervalles fermés et isna/notna pour l'absence.
  • Utilisez .str, .dt et .cat pour les opérations typées sur chaînes, dates et catégories.
  • Vérifiez l'index d'un masque construit depuis un autre objet : l'alignement peut changer les lignes retenues.
recent = orders.loc[
orders["created_at"].ge("2026-01-01") & orders["created_at"].lt("2026-04-01")
]
missing_customer = orders.loc[orders["customer_id"].isna()]

query

DataFrame.query peut rendre lisibles de longues expressions analytiques :

threshold = 100
result = orders.query("amount >= @threshold and status == 'paid'")

Préférez les expressions booléennes ordinaires lorsque les noms de colonnes sont difficiles, les prédicats sont construits dynamiquement ou le débogage Python vaut mieux que la concision. Ne considérez jamais une chaîne de requête assemblée depuis une entrée non fiable comme une frontière de sécurité.

Filtrer ou sélectionner

Le filtrage choisit les lignes par prédicat. .loc peut choisir simultanément lignes et colonnes ; .iloc choisit par position. Séparer ces idées évite beaucoup d'erreurs de forme et d'étiquette.

Vérifier les lignes retenues

Ici, large_orders a la forme (1, 3) et garde la ligne 0 ; result garde aussi cette ligne, avec les quatre colonnes. recent conserve les lignes 0 et 1. L’intervalle semi-ouvert inclut tout le 31 mars ; la borne "2026-03-31" désigne minuit et exclurait l’après-midi.

L’indexation booléenne traite les valeurs manquantes d’un masque booléen nullable comme fausses. N’utilisez mask.fillna(True) que pour conserver les prédicats inconnus. Python and/or ne combine pas les Series élément par élément ; utilisez &/|. Malgré son nom, DataFrame.filter sélectionne des étiquettes d’axe, pas des lignes selon leurs valeurs. query peut exécuter du code arbitraire : ne lui transmettez jamais d’expression non fiable.

Sources

Explorer les liensOuvrir le réseau